expr 支持图表等其他块的映射
md
> ```echarts
> {
> "xAxis": {
> "type": "category",
> "boundaryGap": false,
> "data": [
> "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
> ]
> },
> "yAxis": {
> "type": "value"
> },
> "series": [
> {
> "data": [ 820, 932, 901, 934, 1290, 1330, 1320 ],
> "type": "line",
> "areaStyle": {}
> }
> ]
> }
> ```
> {: id="20240808092645-7leeodx" updated="20240808092645"}
>
{: id="20240808092645-mqc976g" updated="20240808092645"}
那么理论上来说只要 expr 的结果是输出以上内容(除去最后一行,这行是 expr 块的属性,表达式插件会自动添加),那么思源就会显示图表了,想要动态的数据图表只需要在 expr 中动态读取数据并构造对应的图表 json 即可
现在新建一个 expr 块如下, expr 值填写为上面 kramdown 源码去除最后一行的 js 文本字符串,果然正常渲染出了下面的图表
text
"> ```echarts\n> {\n> \"xAxis\": {\n> \"type\": \"category\",\n> \"boundaryGap\": false,\n> \"data\": [\n> \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"\n> ]\n> },\n> \"yAxis\": {\n> \"type\": \"value\"\n> },\n> \"series\": [\n> { \n> \"data\": [ 820, 932, 901, 934, 1290, 1330, 1320 ],\n> \"type\": \"line\",\n> \"areaStyle\": {}\n> }\n> ]\n> }\n> ```\n> {: id=\"20240808092645-7leeodx\" updated=\"20240808092645\"}\n>}"
接下来我给出一个根据其他块数据进行动态渲染图表的样例
现在使用如下js 读取该块的数据作为图表的第一个点的值,expr 代码如下:
js
const data_a = (await expr.exprEvalByID("20240808094354-xiq54n9")) * 3
return `> \`\`\`echarts
> {
> "xAxis": {
> "type": "category",
> "boundaryGap": false,
> "data": [
> "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
> ]
> },
> "yAxis": {
> "type": "value"
> },
> "series": [
> {
> "data": [ ${data_a}, 932, 901, 934, 1290, 1330, 1320 ],
> "type": "line",
> "areaStyle": {}
> }
> ]
> }
> \`\`\`
> {: id="20240808092645-7leeodx" updated="20240808092645"}
>`
可以看到下面图表的第一个数据点和上面的 expr 块的数值(123)关联了起来, 现在只要修改上面的 expr 块的数值,下面的图标就会在切换页签之后自动更新
另外如果您已经安装了expr插件的话,并不需要更新插件,因为这个功能是从一开始就支持的,只是我现在才有空写教程